// I type inst
`define ysyx_050369_TYPE_I 7'b0010011
`define ysyx_050369_ADDI   3'b000
`define ysyx_050369_SLTI   3'b010
`define ysyx_050369_SLTIU  3'b011
`define ysyx_050369_XORI   3'b100
`define ysyx_050369_ORI    3'b110
`define ysyx_050369_ANDI   3'b111
`define ysyx_050369_SLLI   3'b001
`define ysyx_050369_SRI    3'b101

`define ysyx_050369_TYPE_IW 7'b0011011
`define ysyx_050369_ADDIW  3'b000
`define ysyx_050369_SLLIW  3'b001
`define ysyx_050369_SRIW   3'b101
// L type inst
`define ysyx_050369_TYPE_L 7'b0000011
`define ysyx_050369_LB     3'b000
`define ysyx_050369_LH     3'b001
`define ysyx_050369_LW     3'b010
`define ysyx_050369_LD     3'b011
`define ysyx_050369_LBU    3'b100
`define ysyx_050369_LHU    3'b101
`define ysyx_050369_LWU    3'b110


// S type inst
`define ysyx_050369_TYPE_S 7'b0100011
`define ysyx_050369_SB     3'b000
`define ysyx_050369_SH     3'b001
`define ysyx_050369_SW     3'b010

// R and M type inst
`define ysyx_050369_TYPE_R_M 7'b0110011
// R type inst
`define ysyx_050369_ADD_SUB 3'b000
`define ysyx_050369_SLL    3'b001
`define ysyx_050369_SLT    3'b010
`define ysyx_050369_SLTU   3'b011
`define ysyx_050369_XOR    3'b100
`define ysyx_050369_SR     3'b101
`define ysyx_050369_OR     3'b110
`define ysyx_050369_AND    3'b111

// M type inst
`define ysyx_050369_MUL    3'b000
`define ysyx_050369_MULH   3'b001
`define ysyx_050369_MULHSU 3'b010
`define ysyx_050369_MULHU  3'b011
`define ysyx_050369_DIV    3'b100
`define ysyx_050369_DIVU   3'b101
`define ysyx_050369_REM    3'b110
`define ysyx_050369_REMU   3'b111

`define ysyx_050369_TYPE_R_MW 7'b0111011
`define ysyx_050369_ADD_SUBW 3'b000
`define ysyx_050369_SLLW   3'b001
`define ysyx_050369_SRW    3'b101
`define ysyx_050369_MULW   3'b000
`define ysyx_050369_DIVW   3'b100
`define ysyx_050369_DIVUW  3'b101
`define ysyx_050369_REMW   3'b110
`define ysyx_050369_REMUW  3'b111
// J type inst
`define ysyx_050369_JAL    7'b1101111
`define ysyx_050369_JALR   7'b1100111

`define ysyx_050369_LUI    7'b0110111
`define ysyx_050369_AUIPC  7'b0010111
`define ysyx_050369_NOP    7'h00000013
`define ysyx_050369_NOP_OP 7'b0000001
// `define ysyx_050369_MRET   32'h30200073
`define ysyx_050369_RET    32'h00008067

`define ysyx_050369_FENCE  32'h0000100f
`define ysyx_050369_ECALL  32'h73
`define ysyx_050369_EBREAK 32'h00100073
`define ysyx_050369_MRET   32'h30200073
//CSR
`define ysyx_050369_TYPE_CSR  7'b1110011
`define ysyx_050369_CSREX   3'b000
`define ysyx_050369_CSRRW   3'b001
`define ysyx_050369_CSRRS   3'b010
`define ysyx_050369_CSRRC   3'b011
`define ysyx_050369_CSRRWI  3'b101
`define ysyx_050369_CSRRSI  3'b110
`define ysyx_050369_CSRRCI  3'b111
 
// B type inst
`define ysyx_050369_TYPE_B 7'b1100011
`define ysyx_050369_BEQ    3'b000
`define ysyx_050369_BNE    3'b001
`define ysyx_050369_BLT    3'b100
`define ysyx_050369_BGE    3'b101
`define ysyx_050369_BLTU   3'b110
`define ysyx_050369_BGEU   3'b111

`define ysyx_050369_alu_add      4'b0000
`define ysyx_050369_alu_sll      4'b0001
`define ysyx_050369_alu_less     4'b0010//uless = unsigned less
`define ysyx_050369_alu_setB     4'b0011
`define ysyx_050369_alu_xor      4'b0100
`define ysyx_050369_alu_srl      4'b0101
`define ysyx_050369_alu_or       4'b0110
`define ysyx_050369_alu_and      4'b0111
`define ysyx_050369_alu_mul      4'b1000
`define ysyx_050369_alu_mulh     4'b1001
`define ysyx_050369_alu_mulhu    4'b1011
`define ysyx_050369_alu_mulhsu   4'b1010
`define ysyx_050369_alu_div      4'b1100
`define ysyx_050369_alu_rem      4'b1110

`define ysyx_050369_imm_I        3'b000 
`define ysyx_050369_imm_U        3'b001
`define ysyx_050369_imm_S        3'b010
`define ysyx_050369_imm_B        3'b011
`define ysyx_050369_imm_J        3'b100
`define ysyx_050369_imm_R        3'b111

`define ysyx_050369_CSR_MTVEC    12'h305
`define ysyx_050369_CSR_MCAUSE   12'h342
`define ysyx_050369_CSR_MEPC     12'h341
`define ysyx_050369_CSR_MSTATUS  12'h300
`define ysyx_050369_MIE          12'h304
`define ysyx_050369_MIP          12'h344
`define ysyx_050369_msip         32'h2000000
`define ysyx_050369_mtimecmp     32'h2004000
`define ysyx_050369_mtime        32'h200BFFF
// `define ysyx_050369_BOOTH
// `define ysyx_050369_SOC
`define FAST